home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / role / roleplay.0-s / roleplay / RolePlaying-1.0 / scripts / CLFunctions < prev    next >
Text File  |  1995-07-09  |  5KB  |  224 lines

  1. # Module: CLFunctions
  2. # Tcl version: 7.3 (Tcl/Tk/XF)
  3. # Tk version: 3.6
  4. # XF version: $__lastrelease$
  5. #
  6.  
  7. # module contents
  8. global moduleList
  9. global autoLoadList
  10. set moduleList(CLFunctions) { CLBind CLDelete CLDelete1 CLGet CLFind CLInsert CLInsert1 CLMoveDown CLMoveUp CLNearest CLNearestTag CLSingleSelect CLSize}
  11. set autoLoadList(CLFunctions) {1}
  12.  
  13. # procedures to show toplevel windows
  14.  
  15.  
  16. # User defined procedures
  17.  
  18.  
  19. # Procedure: CLBind
  20. proc CLBind { canvas} {
  21.   bind $canvas <B2-Motion> {%W scan dragto %x %y}
  22.   bind $canvas <Button-2>  {%W scan mark %x %y}
  23.   bind $canvas <Shift-B1-Motion> {
  24.     set tag [CLNearestTag %W [%W canvasy %y]]
  25.     if {$tag != {}} {%W select to $tag end}}
  26.   bind $canvas <Shift-Button-1> {
  27.     set tag [CLNearestTag %W [%W canvasy %y]]
  28.     if {$tag != {}} {%W select adjust $tag end}}
  29.   bind $canvas <B1-Motion> {
  30.     set tag [CLNearestTag %W [%W canvasy %y]]
  31.         if {$tag != {}} {%W select to $tag end}}
  32.   bind $canvas <Button-1> {
  33.     set tag [CLNearestTag %W [%W canvasy %y]]
  34.     if {$tag != {}} {
  35.       %W select from $tag 0
  36.       %W select to $tag end
  37.     }
  38.       }
  39. }
  40.  
  41.  
  42. # Procedure: CLDelete
  43. proc CLDelete { canvas first {last ""}} {
  44.   if {$last == ""} {set last $first}
  45.   while {$last >= $first} {
  46.     CLDelete1 $canvas $first
  47.     incr last -1
  48.   }
  49. }
  50.  
  51.  
  52. # Procedure: CLDelete1
  53. proc CLDelete1 { canvas first} {
  54.   if {[$canvas find withtag CLE$first] != ""} {
  55.     set bbox [$canvas bbox CLE$first]
  56.     set height [expr [lindex $bbox 3] - [lindex $bbox 1]]
  57.     $canvas delete CLE$first
  58.     CLMoveUp $canvas [expr $first + 1] $height
  59.   }
  60. }
  61.  
  62.  
  63. # Procedure: CLGet
  64. proc CLGet { canvas index} {
  65.   return [$canvas find withtag CLE$index]
  66. }
  67.  
  68.  
  69. # Procedure: CLFind
  70. proc CLFind { canvas text} {
  71.   set numElements [CLSize $canvas]
  72.   for {set i 0} {$i < $numElements} {incr i} {
  73.     set tags [CLGet $canvas $i]
  74.     foreach t $tags {
  75.       if {[$canvas type $t] == "text"} {
  76.     if {[lindex [$canvas itemconfigure $t -text] 4] == $text} {
  77.       return $i
  78.     }
  79.       }
  80.     }
  81.   }
  82. }
  83.  
  84.  
  85. # Procedure: CLInsert
  86. proc CLInsert { canvas where args} {
  87.   set numElements [CLSize $canvas]
  88.   if {$where == "end"} {
  89.     set where $numElements
  90.   }
  91.   if {[expr [llength $args] % 2] != 0} {
  92.     error "wrong # args, should be CLInsert canvas where ?bm1 text1? ?bm2 text2? .frame8.frame4.frame0.frame1.frame1.."
  93.   }
  94.   set l [llength $args]
  95.   for {set i 0} {$i < $l} {incr i 2} {
  96.     set bm [lindex $args $i]
  97.     set text [lindex $args [expr $i + 1]]
  98.     CLInsert1 $canvas $where $bm $text
  99.     incr where
  100.   }
  101. }
  102.  
  103.  
  104. # Procedure: CLInsert1
  105. proc CLInsert1 { canvas where bm text} {
  106.   set numElements [CLSize $canvas]
  107.   if {$where == "end"} {
  108.     set where $numElements
  109.   }
  110.   set tag CLEnew
  111.   set x 0
  112.   $canvas create bitmap $x 0 -anchor nw -tag $tag -bitmap $bm
  113.   set x [lindex [$canvas bbox $tag] 2]
  114.   $canvas create text $x 0 -anchor nw -tag $tag -text $text
  115.   set newbbox [$canvas bbox $tag]
  116.   set itemheight [lindex $newbbox 3]
  117.   set itemwidth  [lindex $newbbox 2]
  118.   $canvas delete $tag
  119.   if {$where < $numElements} {
  120.     CLMoveDown $canvas $where $itemheight
  121.   }
  122.   set sr [lindex [$canvas configure -scrollregion] 4]
  123.   if {$sr == {}} {set sr {0 0 0 0}}
  124.   if {$itemwidth > [lindex $sr 2]} {
  125.     set sr [lreplace $sr 2 2 $itemwidth]
  126.   }
  127.   set sr [lreplace $sr 3 3 [expr [lindex $sr 3] + $itemheight]]
  128.   $canvas configure -scrollregion $sr
  129.   set tag "CLE$where"
  130.   set ypos 0
  131.   if {$where != 0} {
  132.     set prevtag "CLE[expr $where - 1]"
  133.     set bbox [$canvas bbox $prevtag]
  134.     set ypos [lindex $bbox 3]
  135.   }
  136.   set x 0
  137.   $canvas create bitmap $x $ypos -anchor nw -tag $tag -bitmap $bm
  138.   set x [expr [lindex [$canvas bbox $tag] 2] + 4]
  139.   $canvas create text $x $ypos -anchor nw -tag $tag -text $text
  140. }
  141.  
  142.  
  143. # Procedure: CLMoveDown
  144. proc CLMoveDown { canvas where h} {
  145.   for {set i [CLSize $canvas]} {$i > $where} {incr i -1} {
  146.     $canvas move CLE[expr $i - 1] 0 $h
  147.     $canvas addtag CLE$i withtag CLE[expr $i -1]
  148.     $canvas dtag CLE$i CLE[expr $i - 1]
  149.   }
  150. }
  151.  
  152.  
  153. # Procedure: CLMoveUp
  154. proc CLMoveUp { canvas where h} {
  155.   set numElements [CLSize $canvas $where]
  156.   for {set i $where} {$i < $numElements} {incr i} {
  157.     $canvas move CLE$i 0 [expr 0 - $h]
  158.     $canvas addtag CLE[expr $i - 1] withtag CLE$i
  159.     $canvas dtag [expr $i - 1] CLE$i
  160.   }
  161. }
  162.  
  163.  
  164. # Procedure: CLNearest
  165. proc CLNearest { canvas y} {
  166.   set item  [$canvas find closest 0 $y]
  167.   set tags  [$canvas gettags $item]
  168.   foreach t $tags {
  169.     if {[string range $t 0 2] == "CLE"} {
  170.       return [$canvas find withtag $t]
  171.     }
  172.   }
  173. }
  174.  
  175.  
  176. # Procedure: CLNearestTag
  177. proc CLNearestTag { canvas y} {
  178.   set item  [$canvas find closest 0 $y]
  179.   set tags  [$canvas gettags $item]
  180.   foreach t $tags {
  181.     if {[string range $t 0 2] == "CLE"} {
  182.       return $t
  183.     }
  184.   }
  185.   return {}
  186. }
  187.  
  188.  
  189. # Procedure: CLSingleSelect
  190. proc CLSingleSelect { canvas} {
  191.   bind $canvas <Shift-B1-Motion> {
  192.     set tag [CLNearestTag %W [%W canvasy %y]]
  193.     if {$tag != {}} {
  194.     %W select from $tag 0
  195.     %W select to $tag end
  196.     }}
  197.   bind $canvas <Shift-Button-1> {
  198.     set tag [CLNearestTag %W [%W canvasy %y]]
  199.     if {$tag != {}} {
  200.     %W select from $tag 0
  201.     %W select to $tag end
  202.     }}
  203.   bind $canvas <B1-Motion> {
  204.     set tag [CLNearestTag %W [%W canvasy %y]]
  205.     if {$tag != {}} {
  206.     %W select from $tag 0
  207.     %W select to $tag end
  208.     }}
  209. }
  210.  
  211.  
  212. # Procedure: CLSize
  213. proc CLSize { canvas {start "0"}} {
  214.   for {set i $start} {[$canvas gettags CLE$i] != ""} {incr i} {}
  215.   return $i
  216. }
  217.  
  218.  
  219. # Internal procedures
  220.  
  221. # eof
  222. #
  223.  
  224.